﻿using GDM.Hogar.Entidades;
using GDM.Hogar.Repositorios.Contratos;
using GDM.Hogar.Repositorios.Core;
using GDM.Hogar.Repositorios.Soporte;
using System.Collections.Generic;
using System.Data;
using System.Linq;

namespace GDM.Hogar.Repositorios
{
    public class ActividadRepositorio : Repositorio, IActividadRepositorio
    {
        public ActividadRepositorio(IDbManager dbManager)
            : base(dbManager)
        {
        }

        protected override string ProcEliminar
        {
            get { return string.Empty; }
        }

        protected override string ProcInsertar
        {
            get { return ProcedimientosAlmacenados.Actividad.Insertar; }
        }

        protected override string ProcActualizar
        {
            get { return ProcedimientosAlmacenados.Actividad.Actualizar; }
        }

        public void ActivarActividad(int actividadId, bool activo)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@ActividadId", DbType.Int64, ParameterDirection.Input, actividadId));
            parametros.Add(CrearParametro("@Activa", DbType.Boolean, ParameterDirection.Input, activo));
            EjecutarConsulta(ProcedimientosAlmacenados.Actividad.Activar, parametros);
        }

        public void ActualizarActividad(string actividadHorarios)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@ActividadAsXml", DbType.Xml, ParameterDirection.Input, actividadHorarios));
            Actualizar(parametros);
        }

        public void GuardarActividad(string actividadHorarios)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@ActividadAsXml", DbType.Xml, ParameterDirection.Input, actividadHorarios));
            EjecutarConsulta(ProcedimientosAlmacenados.Actividad.Insertar, parametros);
        }

        public Actividad ObtenerActividad(string nombre)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@Nombre", DbType.String, ParameterDirection.Input, nombre));
            return Obtener<Actividad>(ProcedimientosAlmacenados.Actividad.ObtenerPorNombre, parametros).FirstOrDefault();
        }

        public Actividad ObtenerActividad(int actividadId)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@ActividadId", DbType.Int64, ParameterDirection.Input, actividadId));
            return Obtener<Actividad>(ProcedimientosAlmacenados.Actividad.Obtener, parametros).FirstOrDefault();
        }

        public IList<ConsultaActividad> ObtenerActividades()
        {
            IList<Parametro> parametros = new List<Parametro>();
            return Obtener<ConsultaActividad>(ProcedimientosAlmacenados.Actividad.ObtenerTodas, parametros);
        }

        public IList<HorarioActividad> ObtenerHorarios(int actividadId)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@ActividadId", DbType.Int64, ParameterDirection.Input, actividadId));
            return Obtener<HorarioActividad>(ProcedimientosAlmacenados.Actividad.ObtenerHorarios, parametros);
        }

        public IList<ConsultaInscripcion> ObtenerInscripcionTalleres(int integranteId)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@IntegranteId", DbType.Int64, ParameterDirection.Input, integranteId));
            return Obtener<ConsultaInscripcion>(ProcedimientosAlmacenados.Actividad.ObtenerInscripcionesTalleres, parametros);
        }

        public IList<Actividad> ObtenerTalleres()
        {
            IList<Parametro> parametros = new List<Parametro>();
            return Obtener<Actividad>(ProcedimientosAlmacenados.Actividad.ObtenerTalleres, parametros);
        }

        public IList<ConsultaInscripcion> ObtenerInscripciones()
        {
            IList<Parametro> parametros = new List<Parametro>();
            return Obtener<ConsultaInscripcion>(ProcedimientosAlmacenados.Actividad.ObtenerInscripciones, parametros);
        }
    }
}